/*
 *  System0039.h
 *  SoundController0002
 *
 *  Created by jiro on 11/09/14.
 *  Copyright 2011 jiro music. All rights reserved.
 *
 */

#pragma once

#include "../HarmonicSystem/HarmonicSystem.h"
#include "ConcreteRegion.h"
#include "AbstractRegion.h"
#include "ConcreteLine.h"
#include "AbstractLine.h"
#include "ConcreteNote.h"
#include "AbstractNote.h"
#include "ConcreteNoteGenerator.h"
#include "ConcreteNoteGeneratorSelector.h"
//#include "MarchovicConcreteNoteGenerator.h"


namespace sc
{
namespace system0039
{

	class AbstractNote;

	class System0039
	{
	public:
	protected:
	private:

		static ::sc::hs::SoundList soundList[ ::sc::Note::NoteIdCount ];

		static bool isDirty;

	public:

		static void GetConcreteNotesFrom( const AbstractNote& abstractNote, std::vector< ::sc::hs::HarmonicSound >& sounds );

		static void OutputFile( const ::sc::system0039::AbstractRegion& region, const std::string& path, int repeatCount );

		static void Record( AudioRecorder32& recorder, double& startTime, const ::sc::system0039::ConcreteRegion& region, int repeatCount );


	protected:

	private:

		static void GenerateSoundListIfNeeded();

	};

}
}
